using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Threading;
using System.Globalization;

/* =====================================================================

  File:      OrderDetails.aspx.cs for Adventure Works Cycles Storefront Sample
  Summary:   Displays a summary of the selected order and the line items which are part of the order.
  Date:	     June 16, 2003

---------------------------------------------------------------------

  This file is part of the Microsoft SQL Server Code Samples.
  Copyright (C) Microsoft Corporation.  All rights reserved.

This source code is intended only as a supplement to Microsoft
Development Tools and/or on-line documentation.  See these other
materials for detailed information regarding Microsoft code samples.

THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.

======================================================= */

namespace Microsoft.Samples.SqlServer {

    public partial class OrderDetailsPage : System.Web.UI.Page
    {


//         public OrderDetailsPage() {
//             Page.Init += new System.EventHandler(Page_Init);
//         }

        //*******************************************************
        //
        // The Page_Load event on this page is used to obtain
        // order information from a database and then update
        // UI elements with them.
        //
        //*******************************************************

        private void Page_Load(object sender, System.EventArgs e) {

            // Obtain Order ID from QueryString
            int OrderID = Int32.Parse(Request.Params["OrderID"], CultureInfo.InvariantCulture);

            // Get the customer ID too
            string CustomerId = User.Identity.Name;

            // Obtain Order Details from Database
            OrdersDB orderHistory = new OrdersDB();
            OrderDetails myOrderDetails = orderHistory.GetOrderDetails(OrderID, CustomerId);

            // if order was found, display it
			if (myOrderDetails != null)
			{

				// Bind Items to GridControl
				GridControl1.DataSource = myOrderDetails.OrderItems;
				GridControl1.DataBind();

				// Update labels with summary details
				totalLabel.Text = myOrderDetails.OrderTotal;
				orderNumberLabel.Text = OrderID.ToString(CultureInfo.InvariantCulture);
				orderDateLabel.Text = myOrderDetails.OrderDate.ToShortDateString();
				shipDateLabel.Text = myOrderDetails.ShipDate.ToShortDateString();

				AddressLabelControls billToLabels = new AddressLabelControls(
					billToAddressLine1, billToAddressLine2, billToAddressCity,
					billToAddressStateProvince, billToAddressPostalCode);
				AddressLabelControls shipToLabels = new AddressLabelControls(
					shipToAddressLine1, shipToAddressLine2, shipToAddressCity,
					shipToAddressStateProvince, shipToAddressPostalCode);
				CustomerAddresses addresses = orderHistory.
											  GetSalesOrderAddresses(OrderID);

				billToLabels.FillControls(addresses.BillingAddress);
				shipToLabels.FillControls(addresses.ShippingAddress);
			}
				// otherwise display an error message
				else
			{
				MyError.Text = "Order not found!";
				detailsTable.Visible = false;
			}
        }

        private void Page_Init(object sender, EventArgs e) {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
        }

        #region Web Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent() {

        }
        #endregion

    }

	/// <summary>
	///	Collects together a set of address label controls for simpler display code.	
	/// Similar to AddressControls.  Perhaps use generics to combine at some point.
	/// </summary>
 
	public class AddressLabelControls
	{
		private Label line1;

		private Label line2;

		private Label city;

		private Label stateProvince;

		private Label postalCode;

		public AddressLabelControls(Label line1, Label line2, Label city,
									Label stateProvince, Label postalCode)
		{
			this.line1 = line1;
			this.line2 = line2;
			this.city = city;
			this.stateProvince = stateProvince;
			this.postalCode = postalCode;
		}

		public void FillControls(CustomerAddress ca)
		{
			if (ca.AddressID > -1)
			{
				line1.Text = ca.Line1;
				line2.Text = ca.Line2;
				city.Text = ca.City;
				stateProvince.Text = ca.StateProvinceName;
				postalCode.Text = ca.PostalCode;
			}
		}
	}
}
